// 路由中间件的固定写法
const express = require('express');
// 定义路由中间件
let Router = express.Router();
const { TOKENPWD } = require('../util/config');

// 这里定义api接口和编写逻辑
// 1. 用户注册接口
Router.post('/register', (req, res) => {
    // execSql
    // 1.0 处理请求参数
    // 1.1 结构接收到的客户端请求体中的参数值
    let { userName, userPwd } = req.body;

    // 参数判断
    if (!userName || !userPwd) {
        res.send({ code: 201, msg: '用户名或者密码不能为空' });
        return;
    }

    // 判断用户名是否在数据表user中存在了，如果有了则提示用户用户名重复了，code：201，否则执行正常的注册逻辑
    let checkSql = ` select * from user where username ='${userName}' `;
    res.execSql(checkSql, (err, result) => {
        if (err) {
            res.send({ code: 500, msg: err.message });
            return;
        }

        // 如何判断是否已存在呢？可以通过result.length >0 表示存在了
        if (result.length > 0) {
            res.send({ code: 201, msg: `用户名${userName}已经存在，请换一个` });
            return;
        }


        // 拼接sql语句
        let sql = ` insert into user(username,password) values('${userName}','${userPwd}') `;
        // 2.0 处理响应
        res.execSql(sql, (err, result) => {
            if (err) {
                res.send({ code: 500, msg: err.message });
                return;
            }
            // 成功
            res.send({ code: 200, msg: '注册成功' });
        })
    })
})

// 2. 用户登录接口
Router.post('/login', (req, res) => {
    // execSql
    // 1.0 处理请求参数
    // 1.1 解构客户端请求上来的数据
    let { userName, userPwd } = req.body;

    // 1.2 参数合法性检查
    if (!userName || !userPwd) {
        res.send({ code: 201, msg: '用户名或者密码参数非法', token: '' });
        return;
    }


    // 2.0 处理响应数据
    let sql = ` select * from user where username = '${userName}' and password = '${userPwd}' `;
    // console.log(sql);
    res.execSql(sql, (err, result) => {
        if (err) {
            res.send({ code: 500, msg: err.message, token: '' });
            return;
        }

        // 处理用户名或者密码错误的问题
        if (result.length <= 0) {
            res.send({ code: 201, msg: '用户名或者密码错误,请重新输入', token: '' });
            return;
        }
        // 成功响应
        res.send({ code: 200, msg: '登录成功', token: createToken(userName) });

    })

})

const jsonwebtoken = require('jsonwebtoken');
function createToken(username) {
    // 利用jsonwebtoke生成一个token
    // jsonwebtoken.sign(表示你要给token添加的数据对象，加密的密码,token的过期时间)
    let tokenpwd = TOKENPWD;//'itheima65'; // 定义一个加密的密码为:itheima65  ，大家可以自己定密码
    let exprise = { expiresIn: 60 * 60 };  //定义了一个1小时有效期的token，过期时间的单位是秒
    // Bearer 固定的前缀是用来兼容 express-jwt验证处理的
    return "Bearer " + jsonwebtoken.sign({ username: username }, tokenpwd, exprise);  //生成一个有效期为1小是的token
}

// 导出路由中间件
module.exports = Router;